最近在自己鼓捣node.js
,尝试着使用express
+ mongoose
搭建自己的web服务器,在这把mongoose
的一些收获和知识点记录下来。
因为之前一直使用的是java
操作MongoDB
,对java
实体类与Map
对象的互转累觉不爱啊。
Connect to MongoDB
index.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var mongoose = require('mongoose'); //连接Mongo数据库 mongoose.connect('mongodb://localhost/test'); //监听Mongo首次连接事件 db.once('open' ,() => { console.log('连接数据库成功') }) //监听Mongo异常并重连 db.on('error', function(error) { console.error('Error in MongoDb connection: ' + error); mongoose.disconnect(); }); db.on('close', function() { console.log('数据库断开,重新连接数据库'); mongoose.connect(config.url, {server:{auto_reconnect:true}}); });
|
Schema
首次接触mongoose
的是Schema
。Schema
可以理解为表结构的定义,虽然mongo
并没有表这个概念,类似与java
中pojo
实体类。
定义一个简单的Scheam
index.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var mongoose = require('mongoose'); var Schema = mongoose.Schema; //定义对象blogSchema var blogSchema = new Schema({ title: String, author: String, body: String, commets: [{body: String, date: Date}], date: {type: Date, defult: Date.now}, hidden: boolean, meta: { votes: Number, favs: Number } }) //将blogSchema发布为model,并且指定collection名为blog_c; var blog = db.model('blog_c', blogSchema);
|
Scheam
只是单纯的定义了mongoDB里面的document结构,通过Scheam可以定义字段的类型、唯一性、索引和验证;
Schema可以定义的字段的类型有:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
一个包含所有类型Schema
的实现
index.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blogSchema = new Schema({ title: String, author: String, body: String, commets: [{body: String, date: Date}], date: {type: Date, defult: Date.now}, hidden: boolean, meta: { votes: Number, favs: Number } })
|
通过执行node index.js
就可以看见你的mongo库里面插入了一条包含各种数据类型的字段的Document记录;
Misc
通过node
+mongoose
来操作Mongo
确实比java来的方便的许多,比较JS原生支持json格式的数据。